跳到主要内容

MQTT 通信设置

本指南向您展示如何使用 Node-RED 配置 OV80i 摄像头与外部设备之间的 MQTT 通信。MQTT 提供面向物联网应用和远程设备通信的轻量、可靠的消息传递。

何时使用 MQTT 通信: IoT 设备集成、远程监控系统、发布/订阅消息模式、低带宽环境、分布式传感器网络,或需要在自动重连情况下实现可靠消息传递。

先决条件

  • OV80i 摄像系统已搭建并连接
  • 摄像头与 MQTT broker 之间的网络连接
  • 可用的 MQTT broker(本地或云端)
  • 对 MQTT 概念(主题 topics、发布 publish/subscribe)的基本了解
  • 摄像头上配置了 active recipe

MQTT 通信概览

MQTT 关键概念:

  • Broker(代理):在客户端之间路由消息的中心服务器
  • Topics(主题):消息类别(如 "camera/status"、"commands/trigger")
  • Publish(发布):向某个主题发送消息
  • Subscribe(订阅):从主题接收消息
  • QoS:服务质量等级(0、1、2)

第 1 步:验证网络配置

1.1 检查 Camera 网络设置

  1. 打开 System Settings
  2. 记下相机 IP 地址(例如 10.250.0.100)
  3. 验证到 MQTT broker 的网络连通性

1.2 MQTT Broker 要求

确保 MQTT broker 可访问:

  • 同一网络: 摄像头必须能够到达 broker IP 地址
  • 端口访问: 默认 MQTT 端口 1883(TLS 使用 8883)
  • 认证: 如 broker 要求,请使用用户名/密码
  • 防火墙: 在所需端口上允许 MQTT 流量

1.3 网络要求

组件IP 地址端口备注
Camera10.250.0.100N/A必须能到达 broker
MQTT Broker10.250.0.2001883标准 MQTT 端口
Client Devices10.250.0.xxx变动任何订阅设备

第 2 步:访问 Node-RED 编辑器

2.1 导航至 IO Block

  1. 在 Recipe Editor 中打开活跃 recipe
  2. 在面包屑菜单中点击 "IO Block"
  3. 点击 "Configure IO" 进入 Node-RED 编辑器

2.2 验证 MQTT 节点是否可用

在 Node-RED 调色板中检查 MQTT 节点:

  • mqtt in - 订阅 MQTT 主题
  • mqtt out - 向 MQTT 主题发布

检查点: 您应在左侧面板的 Network 部分看到 MQTT 节点。

第 3 步:配置 MQTT Broker 连接

3.1 添加 MQTT Broker 配置

  1. 将 "mqtt in" 节点拖到画布上(用于初始设置)
  2. 双击节点 打开配置
  3. 在 Server 字段旁点击铅笔图标
  4. 点击 "Add new mqtt-broker"

3.2 配置 Broker 设置

基础 Broker 配置:

设置项数值描述
名称Camera MQTT Broker描述性标识符
Server192.168.0.200MQTT broker IP 地址
Port1883标准 MQTT 端口
ProtocolMQTT V3.1.1建议版本
Client ID(auto-generate)自动分配时留空

3.3 身份验证设置(如需要)

如果 broker 需要身份验证:

设置项描述
用户名MQTT broker 用户名
密码MQTT broker 密码
Use TLS启用以进行安全连接(端口 8883)

3.4 高级设置

连接选项:

Setting建议值描述
Keep Alive60 秒心跳间隔
Clean SessionTrue每次连接重新开始
Auto ConnectTrue自动重新连接

3.5 保存 Broker 配置

  1. Click "Add" 保存 broker 设置
  2. Click "Done" 关闭节点配置
  3. Broker configuration 现已可用于所有 MQTT 节点

第 4 步:配置 MQTT Input (订阅)

4.1 设置 MQTT In 节点

  1. Select the "mqtt in" node you added
  2. Double-click to configure
  3. Configure subscription settings:

4.2 MQTT In 配置

订阅设置:

Setting示例值描述
ServerCamera MQTT Broker选择已配置的 broker
Topiccamera/commands要订阅的主题
QoS0消息交付质量
Outputauto-detect消息格式
NameCommand Listener节点标识符

4.3 Topic 命名规范

推荐的主题结构:

PurposeTopic ExampleUsage
Commandscamera/commands接收控制命令
Status requestscamera/status/request状态信息请求
Configurationcamera/config配置变更

4.4 配置消息处理

  1. Add "debug" node 以监控传入消息
  2. Connect: MQTT In → Debug
  3. Configure debug node 以显示完整消息

第 5 步:配置 MQTT Output (发布)

5.1 添加 MQTT Out 节点

  1. Drag "mqtt out" node onto canvas
  2. Double-click to configure
  3. Select same broker configuration

5.2 MQTT Out 配置

发布设置:

Setting示例值描述
ServerCamera MQTT Broker同输入端 broker
Topiccamera/responses相机响应主题
QoS0消息交付质量
RetainFalse不存储最后一条消息
NameResponse Publisher节点标识符

5.3 响应主题结构

推荐的响应主题:

Response TypeTopic ExampleUsage
Status updatescamera/status相机状态信息
Resultscamera/results检查结果
Acknowledgmentscamera/ack命令确认

第 6 步:创建基本通信流

6.1 构建出站消息流

创建一个用于从相机发布消息的流:

  1. Add "inject" node 用于触发消息
  2. Add "function" node 用于消息格式化
  3. Add "mqtt out" node 用于发布
  4. Connect: Inject → Function → MQTT Out

6.2 构建入站消息流

创建一个单独的流来接收消息:

  1. Add "mqtt in" node 用于订阅
  2. Add "debug" node 用于监控
  3. Connect: MQTT In → Debug

6.3 配置 Inject 节点

  1. Double-click inject node
  2. Configure settings:
    • Name: "Send Test Message"
    • Payload: Timestamp
    • Topic: (leave empty)
  3. Click "Done"

6.4 配置函数节点

简单消息格式化:

// Format outgoing message
msg.topic = "camera/status";
msg.payload = "Camera online - " + new Date().toISOString();
return msg;

  1. 双击函数节点
  2. 将上面的代码复制到 "On Message" 选项卡
  3. 名称: "Format Message"
  4. 点击 "Done"

6.5 配置 MQTT Out Node

  1. 双击 mqtt out node
  2. 选择 broker: Camera MQTT Broker(已在前面配置)
  3. Topic:(留空 - 由 function node 设置)
  4. 名称: "Publish Status"
  5. 点击 "Done"

6.6 配置 MQTT In Node

  1. 双击 mqtt in node
  2. 选择 broker: Camera MQTT Broker
  3. Topic: camera/commands
  4. 名称: "Command Listener"
  5. 点击 "Done"

6.7 配置 Debug Node

  1. 双击 debug node
  2. 输出: 完整的 msg 对象
  3. 名称: "Incoming Messages"
  4. 点击 "Done"

6.8 最终流程结构

您的完整流程应为:

输出: Inject → Function → MQTT Out 输入: MQTT In → Debug

Step 7: 部署与测试配置

7.1 部署流程

  1. 点击“Deploy”按钮(右上角)
  2. 验证部署成功 消息
  3. 检查节点状态指示器:
    • 绿色圆点: 已连接到 broker
    • 红色圆点: 连接失败
    • 黄色圆点: 正在连接

7.2 测试内部通信

测试摄像头的 MQTT 发布:

  1. 点击 inject 按钮 以发送测试消息
  2. 验证 MQTT Out 节点 显示活动
  3. 如果有外部消息,请检查调试面板

7.3 外部测试(可选)

使用外部 MQTT 客户端向摄像头发送指令进行测试:

使用命令行工具:

# Send a test command to the camera
mosquitto_pub -h 10.250.0.100 -t "camera/commands" -m "test_command"

预期结果: 调试节点应在 Node-RED 调试面板中显示传入的消息。

7.4 验证通信

请检查以下方面:

测试预期结果状态
Broker 连接MQTT 节点显示绿色状态
消息发布Inject 触发 MQTT Out 成功
消息接收调试显示外部消息
重新连接网络中断后自动重新连接

Step 8: MQTT 问题排查

8.1 连接问题

问题症状解决方案
无法连接到 MQTT broker红色状态指示灯检查 broker 的 IP 和端口
认证失败连接被拒绝验证用户名/密码
网络超时黄色正在连接状态检查网络连通性
防火墙阻塞无连接尝试打开 MQTT 端口

8.2 消息问题

问题症状解决方案
没有收到消息调试无输出检查主题订阅
消息未发布外部客户端未看到任何内容验证发布主题
消息格式错误解析失败使用简单文本消息
消息丢失传递不稳定检查 broker 连接

8.3 性能问题

问题症状解决方案
高延迟消息传递延迟检查代理服务器性能
连接中断频繁重连调整 keep-alive 设置
消息泛滥代理服务器负载过高实施消息节流

8.4 调试技巧

系统性故障排除:

  1. 在 Node-RED 中检查代理服务器连接状态
  2. 监控 Node-RED 调试面板中的消息流
  3. 在复杂数据之前使用简单文本消息
  4. 使用 ping 验证网络连通性
  5. 在高级流程之前测试基本主题

成功!您的 MQTT 通信已就绪

您的 MQTT 通信系统现在可以:

  • 连接到 MQTT brokers,并使用正确的身份验证
  • 订阅主题以接收命令和数据
  • 发布消息用于状态更新和响应
  • 处理 JSON 消息格式以实现结构化通信
  • 网络中断后自动重新连接
  • 支持多种 QoS 等级以适应不同的消息优先级

持续维护

常规系统检查

  • 在 Node-RED 中监控代理服务器连接状态
  • 使用测试消息验证消息传递
  • 检查代理服务器日志中是否存在错误模式
  • 根据需要更新身份验证凭据

性能监控

  • 跟踪消息延迟和投递时间
  • 监控代理服务器资源使用情况以实现可扩展性
  • 分析主题使用模式以进行优化
  • 根据实际需求审查 QoS 设置

下一步

在建立基本 MQTT 通信之后:

  1. 实现针对您的应用的具体消息工作流
  2. 建立主题层级以实现有序通信
  3. 添加安全措施,如 TLS 加密
  4. 使用既定的 MQTT 协议与外部系统集成
  5. 为系统健康创建监控仪表板

🔗 相关参考